package com.yfbao.horizon.inspection.engine;

import com.yfbao.horizon.inspection.config.InspectConfig;
import com.yfbao.horizon.inspection.config.ReportTaskConfig;
import com.yfbao.horizon.inspection.dto.ReportDto;
import com.yfbao.horizon.inspection.entity.SystemInspectRecord;

import java.util.List;

/**
 * 巡检引擎接口
 * 定义巡检系统的核心功能方法
 */
public interface InspectEngine<T> {
    
    /**
     * 获取指标编码
     * 需要和配置文件中对应
     * @return 指标编码
     */
    String getCode();
    
    /**
     * 获取任务报告详情
     * @param taskNo 任务编号
     * @return 任务报告详情列表
     */
    List<T> getReportInfo(String taskNo);
    
    /**
     * 巡检指标报告信息自定义实现
     * 含主表和子表信息
     * @param config 巡检配置
     * @param reportConfig 报告任务配置
     * @return 巡检报告数据
     */
    ReportDto inspectCustomerReportResult(InspectConfig config, ReportTaskConfig reportConfig);
    
    /**
     * 根据配置规则生成的巡检指标报告信息
     * 含主表和子表信息
     * @param config 巡检配置
     * @param reportConfig 报告任务配置
     * @return 巡检报告数据
     */
    ReportDto inspectReportResult(InspectConfig config, ReportTaskConfig reportConfig);
    
    /**
     * 巡检指标信息采集自定义实现
     * @param config 巡检配置
     * @return 系统检测记录
     */
    SystemInspectRecord inspectCustomerCollect(InspectConfig config);
    
    /**
     * 根据配置规则触发的巡检项信息采集
     * 一般多用于prometheus指标
     * @param config 巡检配置
     * @return 系统检测记录
     */
    SystemInspectRecord inspectCollect(InspectConfig config);
    
    /**
     * 周期扫描获取数据
     * 针对指标类型巡检项
     * @param config 巡检配置
     */
    void inspectPeriodScan(InspectConfig config);
}